<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('contract_adjustments', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 关联信息
            $table->unsignedBigInteger('contract_id'); // 合同ID
            $table->unsignedBigInteger('employee_id'); // 员工ID
            $table->string('contract_number', 100)->nullable(); // 合同编号

            // 调整信息
            $table->string('adjustment_type', 20); // 调整类型：salary, position, level, benefits, etc.
            $table->string('adjustment_category', 20)->nullable(); // 调整类别：promotion, demotion, transfer, etc.
            $table->string('adjustment_reason', 200)->nullable(); // 调整原因

            // 生效信息
            $table->date('effective_date'); // 生效日期
            $table->date('adjustment_date')->nullable(); // 调整操作日期

            // 薪资调整
            $table->decimal('previous_salary', 10, 2)->nullable(); // 原薪资
            $table->decimal('new_salary', 10, 2)->nullable(); // 新薪资
            $table->decimal('salary_adjustment_amount', 10, 2)->nullable(); // 薪资调整金额
            $table->decimal('salary_adjustment_percentage', 5, 2)->nullable(); // 薪资调整百分比

            // 岗位调整
            $table->string('previous_position', 100)->nullable(); // 原岗位
            $table->string('new_position', 100)->nullable(); // 新岗位
            $table->string('previous_department', 100)->nullable(); // 原部门
            $table->string('new_department', 100)->nullable(); // 新部门

            // 级别调整
            $table->string('previous_level', 50)->nullable(); // 原级别
            $table->string('new_level', 50)->nullable(); // 新级别
            $table->string('level_change_reason', 200)->nullable(); // 级别变更原因

            // 其他调整
            $table->json('benefits_changes')->nullable(); // 福利待遇变更
            $table->json('responsibilities_changes')->nullable(); // 职责变更
            $table->json('working_condition_changes')->nullable(); // 工作条件变更
            $table->json('other_changes')->nullable(); // 其他变更

            // 富文本备注
            $table->longText('adjustment_notes')->nullable(); // 调整详细说明（富文本）
            $table->longText('manager_comments')->nullable(); // 主管意见（富文本）
            $table->longText('hr_comments')->nullable(); // HR意见（富文本）
            $table->longText('employee_comments')->nullable(); // 员工意见（富文本）

            // 审批信息
            $table->string('proposed_by', 100)->nullable(); // 提议人
            $table->date('proposed_at')->nullable(); // 提议日期
            $table->string('approved_by', 100)->nullable(); // 审批人
            $table->date('approved_at')->nullable(); // 审批时间
            $table->text('approval_notes')->nullable(); // 审批备注

            // 状态信息
            $table->string('status', 20)->default('draft'); // 状态：draft, submitted, approved, rejected, effective
            $table->string('rejection_reason', 200)->nullable(); // 拒绝原因

            // 附件信息
            $table->json('attachments')->nullable(); // 相关附件
            $table->json('supporting_documents')->nullable(); // 支撑文件

            // 扩展字段
            $table->json('custom_fields')->nullable(); // 自定义字段
            $table->text('internal_notes')->nullable(); // 内部备注

            // 统计信息
            $table->integer('version')->default(1); // 版本号
            $table->boolean('is_latest')->default(true); // 是否最新版本

            // 索引
            $table->index(['contract_id']);
            $table->index(['employee_id']);
            $table->index(['adjustment_type']);
            $table->index(['adjustment_category']);
            $table->index(['effective_date']);
            $table->index(['adjustment_date']);
            $table->index(['status']);
            $table->index(['approved_at']);
            $table->index(['is_latest']);

            // 外键约束
            $table->foreign('contract_id')->references('id')->on('contracts')->onDelete('cascade');
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('contract_adjustments');
    }
};
